import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UdpEchoClient {
      private DatagramSocket socket = null ;

      //因为UDP是无连接的 , 所以需要记录服务器的信息
      // 服务器ip 和 端口号
      private String serverIp  = "";
      private int serverPort = 0  ;
      //构造各个属性
    public UdpEchoClient(String ip , int port) throws SocketException {
                     //客户端不手动指定端口 ;
        this.socket = new DatagramSocket() ;
        //UDP不记录对端信息, 我们手动记录
        this.serverIp = ip ;
        this.serverPort = port ;
    }
    // 启动客户端start
    public void start() throws IOException {
        System.out.println("客户端启动");
        //1.从控制台输入, 作为客户端的请求
        Scanner scanner = new Scanner(System.in) ;
        while (true){
            //输入请求
            System.out.print("输入请求-> ");
             String request = scanner.next() ;
             //2. 把请求内容构造成 DatagramPacket 发给服务器 ;
            DatagramPacket requestPacket = new DatagramPacket(
                    // 请求内容
                    request.getBytes() , request.getBytes().length ,
                    // 传入 目标服务器的 ip 和 端口
                    // 稍微转换一下 Ip地址, 转成 InetAddress 对象
                    InetAddress.getByName(serverIp) , serverPort
                    ) ;
            socket.send(requestPacket);

            //3. 开始 尝试读取 服务器 返回的 响应
            DatagramPacket responsePacket = new DatagramPacket(new byte[4096] , 4096) ;
            socket.receive(responsePacket);
            //4. 把响应的数据 转换, 显示出来
            String response = new String(responsePacket.getData() , 0 , responsePacket.getLength()) ;
            System.out.println(response);
        }

    }
     // 启动客户端
    public static void main(String[] args) throws IOException {
                     // 服务器和客户端在同一台主机, 使用环回ip, 服务器端口是什么,客户端的也是什么
      UdpEchoClient client = new UdpEchoClient("42.192.83.143" , 9090);
       client.start();
    }
}
